{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Classification of Japanese news-title by BERT",
      "provenance": [],
      "collapsed_sections": []
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.6.7"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU",
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "5834bcf433594bb6b9f73226ee8943e3": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "state": {
            "_view_name": "HBoxView",
            "_dom_classes": [],
            "_model_name": "HBoxModel",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "box_style": "",
            "layout": "IPY_MODEL_c81c349c08904a6bb88cce3a74beb45a",
            "_model_module": "@jupyter-widgets/controls",
            "children": [
              "IPY_MODEL_d5fda26cc55d4de0a04b7bc4ea78d201",
              "IPY_MODEL_a5ff6d7b35c644a09826923ebdb8d2e0"
            ]
          }
        },
        "c81c349c08904a6bb88cce3a74beb45a": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "d5fda26cc55d4de0a04b7bc4ea78d201": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "IntProgressModel",
          "state": {
            "_view_name": "ProgressView",
            "style": "IPY_MODEL_e3a8f0cec79f4bcc86b5e77472a2d46a",
            "_dom_classes": [],
            "description": "Converting examples to features",
            "_model_name": "IntProgressModel",
            "bar_style": "success",
            "max": 3503,
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": 3503,
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "orientation": "horizontal",
            "min": 0,
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_d90b039d20404e7b818062ac92c56e85"
          }
        },
        "a5ff6d7b35c644a09826923ebdb8d2e0": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "state": {
            "_view_name": "HTMLView",
            "style": "IPY_MODEL_f4e80f7855c24e309420aea71f920e2a",
            "_dom_classes": [],
            "description": "",
            "_model_name": "HTMLModel",
            "placeholder": "​",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": "100% 3503/3503 [00:00&lt;00:00, 5427.95it/s]",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_43f1157b2d1741f3b1ae355aeeb05fcb"
          }
        },
        "e3a8f0cec79f4bcc86b5e77472a2d46a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "ProgressStyleModel",
            "description_width": "initial",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "bar_color": null,
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "d90b039d20404e7b818062ac92c56e85": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "f4e80f7855c24e309420aea71f920e2a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "DescriptionStyleModel",
            "description_width": "",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "43f1157b2d1741f3b1ae355aeeb05fcb": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "904fd92e1206421190d8a4c8385b1072": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "state": {
            "_view_name": "HBoxView",
            "_dom_classes": [],
            "_model_name": "HBoxModel",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "box_style": "",
            "layout": "IPY_MODEL_bc522bc3ae054354a3b2e13c944f252c",
            "_model_module": "@jupyter-widgets/controls",
            "children": [
              "IPY_MODEL_466ca162349c44fb87c7a324f3fed2e1",
              "IPY_MODEL_8dba4e2370744be6a9cd02baf13bd196"
            ]
          }
        },
        "bc522bc3ae054354a3b2e13c944f252c": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "466ca162349c44fb87c7a324f3fed2e1": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "IntProgressModel",
          "state": {
            "_view_name": "ProgressView",
            "style": "IPY_MODEL_ddd8d3c5a62c46e4bc8b35d1cd01f192",
            "_dom_classes": [],
            "description": "Converting examples to features",
            "_model_name": "IntProgressModel",
            "bar_style": "success",
            "max": 876,
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": 876,
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "orientation": "horizontal",
            "min": 0,
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_651e12be75f643e9b1ee01dd1f131e3d"
          }
        },
        "8dba4e2370744be6a9cd02baf13bd196": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "state": {
            "_view_name": "HTMLView",
            "style": "IPY_MODEL_75d747503c4a4920bbb88a669c1ced2f",
            "_dom_classes": [],
            "description": "",
            "_model_name": "HTMLModel",
            "placeholder": "​",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": "100% 876/876 [00:00&lt;00:00, 4768.99it/s]",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_206ac1d2d7a547598097d1b2a127766e"
          }
        },
        "ddd8d3c5a62c46e4bc8b35d1cd01f192": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "ProgressStyleModel",
            "description_width": "initial",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "bar_color": null,
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "651e12be75f643e9b1ee01dd1f131e3d": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "75d747503c4a4920bbb88a669c1ced2f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "DescriptionStyleModel",
            "description_width": "",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "206ac1d2d7a547598097d1b2a127766e": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        }
      }
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LUAOsKRhfq_2",
        "colab_type": "text"
      },
      "source": [
        "# BERTによる日本語ニュースタイトルの判別"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "VWgIg00VKisH",
        "colab_type": "text"
      },
      "source": [
        "#  Extracting fixed feature vectors of Japanese news by BERT"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "aWry1gnsyOzO",
        "colab_type": "text"
      },
      "source": [
        "## 1. Import library　（ライブラリの取得）"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TTTaFa5RSJFv",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import tensorflow as tf\n",
        "import pandas as pd\n",
        "import os\n",
        "import re\n",
        "import sys\n",
        "import time\n",
        "import numpy as np\n",
        "\n",
        "from pathlib import Path\n",
        "from sklearn.model_selection import train_test_split\n",
        "\n",
        "from tqdm import tqdm_notebook\n",
        "from tensorflow.keras import backend as K"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "b9lRJHilxwyV",
        "colab_type": "code",
        "outputId": "e4bd598f-97a8-4b7a-9ee2-6ae6a55393c4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 168
        }
      },
      "source": [
        "!test -d bert_repo || git clone https://github.com/google-research/bert bert_repo\n",
        "if not 'bert_repo' in sys.path:\n",
        "  sys.path += ['bert_repo']\n",
        "\n",
        "# import python modules defined by BERT\n",
        "import modeling\n",
        "import optimization\n",
        "import tokenization\n",
        "from tokenization import FullTokenizer\n",
        "\n",
        "# import tfhub \n",
        "import tensorflow_hub as hub\n",
        "\n",
        "# Initialize session\n",
        "sess = tf.Session()\n",
        "\n",
        "# Params for bert model and tokenization\n",
        "bert_path = \"https://tfhub.dev/google/bert_multi_cased_L-12_H-768_A-12/1\"\n",
        "max_seq_length = 50\n",
        "\n"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Cloning into 'bert_repo'...\n",
            "remote: Enumerating objects: 336, done.\u001b[K\n",
            "remote: Total 336 (delta 0), reused 0 (delta 0), pack-reused 336\n",
            "Receiving objects: 100% (336/336), 290.23 KiB | 430.00 KiB/s, done.\n",
            "Resolving deltas: 100% (184/184), done.\n",
            "WARNING:tensorflow:From bert_repo/optimization.py:87: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fLtxM4w9AxRz",
        "colab_type": "text"
      },
      "source": [
        "## 2. Load livedoor-news-data　（ライブドアニュースデータの取得）\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "V-6dlrkglHN7",
        "colab_type": "text"
      },
      "source": [
        "livedoor news corpus    CC BY-ND 2.1 JP　　　https://www.rondhuit.com/download.html#ldcc"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "HOYlk-EscSqd",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "train_df = pd.read_csv(\"train5.tsv\", delimiter='\\t', header=None, names=['label', 'title'])\n",
        "dev_df = pd.read_csv(\"dev5.tsv\", delimiter='\\t', header=None, names=['label', 'title'])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jbQpDWW-dHOd",
        "colab_type": "code",
        "outputId": "ed641efb-7232-4bf6-a737-2d06c32cb5b0",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 203
        }
      },
      "source": [
        "train_df=train_df.loc[:, ['title','label']]\n",
        "train_df=train_df.rename({'title':'sentence','label':'polarity'},axis='columns')\n",
        "train_df.head() "
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sentence</th>\n",
              "      <th>polarity</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>月額1,050円でSASディスクを搭載！クラウドプラン 「エクスライト（EX-LITE）」の...</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>例のあのメニューも！ニコニコ超会議のフードコートメニュー14種類紹介（前半）</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>山田孝之と小西真奈美の映画に撮影していない“あるモノ”が映り込んでいた</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>ガガを聴きながら毎朝歯磨き！　レディー・ガガ　シンギングトゥースブラシ独占先行販売</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>斎藤佑樹はプロで通用するのか？</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                                            sentence  polarity\n",
              "0  月額1,050円でSASディスクを搭載！クラウドプラン 「エクスライト（EX-LITE）」の...         0\n",
              "1             例のあのメニューも！ニコニコ超会議のフードコートメニュー14種類紹介（前半）         0\n",
              "2                山田孝之と小西真奈美の映画に撮影していない“あるモノ”が映り込んでいた         1\n",
              "3          ガガを聴きながら毎朝歯磨き！　レディー・ガガ　シンギングトゥースブラシ独占先行販売         0\n",
              "4                                    斎藤佑樹はプロで通用するのか？         2"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mYH7IpxQcN7y",
        "colab_type": "code",
        "outputId": "de535f44-eb2c-4e97-9083-35fca6a6eb62",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 667
        }
      },
      "source": [
        "dev_df=dev_df.loc[:, ['title','label']]\n",
        "dev_df=dev_df.rename({'title':'sentence','label':'polarity'},axis='columns')\n",
        "dev_df.head(20) "
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sentence</th>\n",
              "      <th>polarity</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>ドコモのｓｐモードでまたトラブル発生！　今度はつながらない【話題】</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>ダルビッシュ、今季だけで3つの魔球体得へ</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>本格的に仕事復帰、マリエが今一番会いたい人は“スギちゃん”</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>価格が安価で矯正を気づかれない！綺麗な歯並びになれる、歯列矯正の最前線</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>先輩・桑田、松井秀喜にズバリ「引退とかは考えなかった？」</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>【モテる家電】誰でもかっこよくなれる！　男の正しい眉整え術</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>【オトナ女子のリアルな悩み】最長で半年…恋愛が長続きしない理由は？</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>虐待だ！の声多数、日テレで人気のワンコが声帯除去手術を受けていた事実に非難殺到【話題】</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>1枚で主食＋デザートに!?　宅配ピザ最前線「モッチリーノ」のお得なおいしさ</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>スマホで花咲く恋もある!?　合コンで使える本当の“モテテク”</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>「女性の持つコンプレックスを取り去る仕事」 湘南美容外科クリニック イメケン“情熱”院長イン...</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>愛と節約　Presented by ゆるっとcafe</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>Test Report タスカム US-125M［USBオーディオインターフェイス］【ビデオ...</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>【週末映画まとめ読み】武井咲「あまり台本を読まなくていいのかな？」</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>「3.11で変わったこと」をリアルに感じるアンケート結果を公開！</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>大阪人に挑戦状！ 『シャーロック・ホームズ』謎解きパズルが出現</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>死ぬまで戦え！　『スターシップ・トゥルーパーズ』昆虫と人類の壮絶な戦いが再び</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17</th>\n",
              "      <td>パナソニック新発売のエアコンは新開発「トップユニット」構造の「Xシリーズ」</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>18</th>\n",
              "      <td>スマホ持ちで有線なアナタに！無線LAN親機になる超小型アダプター</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>19</th>\n",
              "      <td>クリスマスに選びたい最高のプレゼントとは？</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                                             sentence  polarity\n",
              "0                   ドコモのｓｐモードでまたトラブル発生！　今度はつながらない【話題】         4\n",
              "1                                ダルビッシュ、今季だけで3つの魔球体得へ         2\n",
              "2                       本格的に仕事復帰、マリエが今一番会いたい人は“スギちゃん”         1\n",
              "3                 価格が安価で矯正を気づかれない！綺麗な歯並びになれる、歯列矯正の最前線         0\n",
              "4                        先輩・桑田、松井秀喜にズバリ「引退とかは考えなかった？」         2\n",
              "5                       【モテる家電】誰でもかっこよくなれる！　男の正しい眉整え術         4\n",
              "6                   【オトナ女子のリアルな悩み】最長で半年…恋愛が長続きしない理由は？         3\n",
              "7         虐待だ！の声多数、日テレで人気のワンコが声帯除去手術を受けていた事実に非難殺到【話題】         4\n",
              "8               1枚で主食＋デザートに!?　宅配ピザ最前線「モッチリーノ」のお得なおいしさ         3\n",
              "9                      スマホで花咲く恋もある!?　合コンで使える本当の“モテテク”         3\n",
              "10  「女性の持つコンプレックスを取り去る仕事」 湘南美容外科クリニック イメケン“情熱”院長イン...         3\n",
              "11                         愛と節約　Presented by ゆるっとcafe         3\n",
              "12  Test Report タスカム US-125M［USBオーディオインターフェイス］【ビデオ...         4\n",
              "13                  【週末映画まとめ読み】武井咲「あまり台本を読まなくていいのかな？」         1\n",
              "14                   「3.11で変わったこと」をリアルに感じるアンケート結果を公開！         3\n",
              "15                    大阪人に挑戦状！ 『シャーロック・ホームズ』謎解きパズルが出現         1\n",
              "16             死ぬまで戦え！　『スターシップ・トゥルーパーズ』昆虫と人類の壮絶な戦いが再び         1\n",
              "17              パナソニック新発売のエアコンは新開発「トップユニット」構造の「Xシリーズ」         4\n",
              "18                   スマホ持ちで有線なアナタに！無線LAN親機になる超小型アダプター         0\n",
              "19                              クリスマスに選びたい最高のプレゼントとは？         3"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nEJbAj_zAxR_",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Create datasets (Only take up to max_seq_length words for memory)\n",
        "train_text = train_df['sentence'].tolist()\n",
        "train_text = [t[0:max_seq_length] for t in train_text]\n",
        "train_text = np.array(train_text, dtype=object)[:, np.newaxis]\n",
        "train_label = train_df['polarity'].tolist()\n",
        "\n",
        "test_text = dev_df['sentence'].tolist()\n",
        "test_text = [t[0:max_seq_length] for t in test_text]\n",
        "test_text = np.array(test_text, dtype=object)[:, np.newaxis]\n",
        "test_label = dev_df['polarity'].tolist()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "djv4vpTiAxSC",
        "colab_type": "text"
      },
      "source": [
        "## 3. Tokenize texts　（テキストをトークン化）\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2e7ibktcAxSD",
        "colab_type": "code",
        "outputId": "a441965e-fed9-4551-ddfc-fedab21cae45",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 250,
          "referenced_widgets": [
            "5834bcf433594bb6b9f73226ee8943e3",
            "c81c349c08904a6bb88cce3a74beb45a",
            "d5fda26cc55d4de0a04b7bc4ea78d201",
            "a5ff6d7b35c644a09826923ebdb8d2e0",
            "e3a8f0cec79f4bcc86b5e77472a2d46a",
            "d90b039d20404e7b818062ac92c56e85",
            "f4e80f7855c24e309420aea71f920e2a",
            "43f1157b2d1741f3b1ae355aeeb05fcb",
            "904fd92e1206421190d8a4c8385b1072",
            "bc522bc3ae054354a3b2e13c944f252c",
            "466ca162349c44fb87c7a324f3fed2e1",
            "8dba4e2370744be6a9cd02baf13bd196",
            "ddd8d3c5a62c46e4bc8b35d1cd01f192",
            "651e12be75f643e9b1ee01dd1f131e3d",
            "75d747503c4a4920bbb88a669c1ced2f",
            "206ac1d2d7a547598097d1b2a127766e"
          ]
        }
      },
      "source": [
        "class PaddingInputExample(object):\n",
        "    \"\"\"Fake example so the num input examples is a multiple of the batch size.\n",
        "  When running eval/predict on the TPU, we need to pad the number of examples\n",
        "  to be a multiple of the batch size, because the TPU requires a fixed batch\n",
        "  size. The alternative is to drop the last batch, which is bad because it means\n",
        "  the entire output data won't be generated.\n",
        "  We use this class instead of `None` because treating `None` as padding\n",
        "  battches could cause silent errors.\n",
        "  \"\"\"\n",
        "\n",
        "class InputExample(object):\n",
        "    \"\"\"A single training/test example for simple sequence classification.\"\"\"\n",
        "\n",
        "    def __init__(self, guid, text_a, text_b=None, label=None):\n",
        "        \"\"\"Constructs a InputExample.\n",
        "    Args:\n",
        "      guid: Unique id for the example.\n",
        "      text_a: string. The untokenized text of the first sequence. For single\n",
        "        sequence tasks, only this sequence must be specified.\n",
        "      text_b: (Optional) string. The untokenized text of the second sequence.\n",
        "        Only must be specified for sequence pair tasks.\n",
        "      label: (Optional) string. The label of the example. This should be\n",
        "        specified for train and dev examples, but not for test examples.\n",
        "    \"\"\"\n",
        "        self.guid = guid\n",
        "        self.text_a = text_a\n",
        "        self.text_b = text_b\n",
        "        self.label = label\n",
        "\n",
        "def create_tokenizer_from_hub_module():\n",
        "    \"\"\"Get the vocab file and casing info from the Hub module.\"\"\"\n",
        "    bert_module =  hub.Module(bert_path)\n",
        "    tokenization_info = bert_module(signature=\"tokenization_info\", as_dict=True)\n",
        "    vocab_file, do_lower_case = sess.run(\n",
        "        [\n",
        "            tokenization_info[\"vocab_file\"],\n",
        "            tokenization_info[\"do_lower_case\"],\n",
        "        ]\n",
        "    )\n",
        "\n",
        "    return FullTokenizer(vocab_file=vocab_file, do_lower_case=do_lower_case)\n",
        "\n",
        "def convert_single_example(tokenizer, example, max_seq_length=max_seq_length):\n",
        "    \"\"\"Converts a single `InputExample` into a single `InputFeatures`.\"\"\"\n",
        "\n",
        "    if isinstance(example, PaddingInputExample):\n",
        "        input_ids = [0] * max_seq_length\n",
        "        input_mask = [0] * max_seq_length\n",
        "        segment_ids = [0] * max_seq_length\n",
        "        label = 0\n",
        "        return input_ids, input_mask, segment_ids, label\n",
        "\n",
        "    tokens_a = tokenizer.tokenize(example.text_a)\n",
        "    if len(tokens_a) > max_seq_length - 2:\n",
        "        tokens_a = tokens_a[0 : (max_seq_length - 2)]\n",
        "\n",
        "    tokens = []\n",
        "    segment_ids = []\n",
        "    tokens.append(\"[CLS]\")\n",
        "    segment_ids.append(0)\n",
        "    for token in tokens_a:\n",
        "        tokens.append(token)\n",
        "        segment_ids.append(0)\n",
        "    tokens.append(\"[SEP]\")\n",
        "    segment_ids.append(0)\n",
        "\n",
        "    input_ids = tokenizer.convert_tokens_to_ids(tokens)\n",
        "\n",
        "    # The mask has 1 for real tokens and 0 for padding tokens. Only real\n",
        "    # tokens are attended to.\n",
        "    input_mask = [1] * len(input_ids)\n",
        "\n",
        "    # Zero-pad up to the sequence length.\n",
        "    while len(input_ids) < max_seq_length:\n",
        "        input_ids.append(0)\n",
        "        input_mask.append(0)\n",
        "        segment_ids.append(0)\n",
        "\n",
        "    assert len(input_ids) == max_seq_length\n",
        "    assert len(input_mask) == max_seq_length\n",
        "    assert len(segment_ids) == max_seq_length\n",
        "\n",
        "    return input_ids, input_mask, segment_ids, example.label\n",
        "\n",
        "def convert_examples_to_features(tokenizer, examples, max_seq_length=max_seq_length):\n",
        "    \"\"\"Convert a set of `InputExample`s to a list of `InputFeatures`.\"\"\"\n",
        "\n",
        "    input_ids, input_masks, segment_ids, labels = [], [], [], []\n",
        "    for example in tqdm_notebook(examples, desc=\"Converting examples to features\"):\n",
        "        input_id, input_mask, segment_id, label = convert_single_example(\n",
        "            tokenizer, example, max_seq_length\n",
        "        )\n",
        "        input_ids.append(input_id)\n",
        "        input_masks.append(input_mask)\n",
        "        segment_ids.append(segment_id)\n",
        "        labels.append(label)\n",
        "    return (\n",
        "        np.array(input_ids),\n",
        "        np.array(input_masks),\n",
        "        np.array(segment_ids),\n",
        "        np.array(labels).reshape(-1, 1),\n",
        "    )\n",
        "\n",
        "def convert_text_to_examples(texts, labels):\n",
        "    \"\"\"Create InputExamples\"\"\"\n",
        "    InputExamples = []\n",
        "    for text, label in zip(texts, labels):\n",
        "        InputExamples.append(\n",
        "            InputExample(guid=None, text_a=\" \".join(text), text_b=None, label=label)\n",
        "        )\n",
        "    return InputExamples\n",
        "  \n",
        "  \n",
        "\n",
        "# Instantiate tokenizer\n",
        "tokenizer = create_tokenizer_from_hub_module()\n",
        "\n",
        "# Convert data to InputExample format\n",
        "train_examples = convert_text_to_examples(train_text, train_label)\n",
        "test_examples = convert_text_to_examples(test_text, test_label)\n",
        "\n",
        "# Convert to features\n",
        "(train_input_ids, train_input_masks, train_segment_ids, train_labels \n",
        ") = convert_examples_to_features(tokenizer, train_examples, max_seq_length=max_seq_length)\n",
        "(test_input_ids, test_input_masks, test_segment_ids, test_labels\n",
        ") = convert_examples_to_features(tokenizer, test_examples, max_seq_length=max_seq_length)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Saver not created because there are no variables in the graph to restore\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Saver not created because there are no variables in the graph to restore\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From bert_repo/tokenization.py:125: The name tf.gfile.GFile is deprecated. Please use tf.io.gfile.GFile instead.\n",
            "\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From bert_repo/tokenization.py:125: The name tf.gfile.GFile is deprecated. Please use tf.io.gfile.GFile instead.\n",
            "\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "5834bcf433594bb6b9f73226ee8943e3",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, description='Converting examples to features', max=3503, style=ProgressSty…"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "904fd92e1206421190d8a4c8385b1072",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, description='Converting examples to features', max=876, style=ProgressStyl…"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UIzuoDOEYCOU",
        "colab_type": "text"
      },
      "source": [
        "## 4.  Create bert_inputs and extract embedding vectors　（学習データ準備と特徴量ベクトルの取得）"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VlVpvIPVUJt1",
        "colab_type": "code",
        "outputId": "5468f68b-c630-4709-d9cb-b626aec612e4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 409
        }
      },
      "source": [
        "bert_inputs = dict(\n",
        "    input_ids=train_input_ids,\n",
        "    input_mask=train_input_masks,\n",
        "    segment_ids=train_segment_ids)\n",
        "\n",
        "bert_inputs"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'input_ids': array([[  101,  4460,  8399, ...,     0,     0,     0],\n",
              "        [  101,  2280,  1946, ...,     0,     0,     0],\n",
              "        [  101,  3504,  5610, ...,     0,     0,     0],\n",
              "        ...,\n",
              "        [  101,  1894,  1993, ...,     0,     0,     0],\n",
              "        [  101,  2108,  3504, ...,     0,     0,     0],\n",
              "        [  101,  1904, 27058, ...,     0,     0,     0]]),\n",
              " 'input_mask': array([[1, 1, 1, ..., 0, 0, 0],\n",
              "        [1, 1, 1, ..., 0, 0, 0],\n",
              "        [1, 1, 1, ..., 0, 0, 0],\n",
              "        ...,\n",
              "        [1, 1, 1, ..., 0, 0, 0],\n",
              "        [1, 1, 1, ..., 0, 0, 0],\n",
              "        [1, 1, 1, ..., 0, 0, 0]]),\n",
              " 'segment_ids': array([[0, 0, 0, ..., 0, 0, 0],\n",
              "        [0, 0, 0, ..., 0, 0, 0],\n",
              "        [0, 0, 0, ..., 0, 0, 0],\n",
              "        ...,\n",
              "        [0, 0, 0, ..., 0, 0, 0],\n",
              "        [0, 0, 0, ..., 0, 0, 0],\n",
              "        [0, 0, 0, ..., 0, 0, 0]])}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5ykFhDz7XIh4",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "BERT_PRETRAINED_DIR='/content/multi_cased_L-12_H-768_A-12'"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "q_6zdEXOTtOv",
        "colab_type": "code",
        "outputId": "283f5711-470e-46a6-d572-1175ab40e67f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 73
        }
      },
      "source": [
        "bert_module = hub.Module(\"https://tfhub.dev/google/bert_multi_cased_L-12_H-768_A-12/1\", trainable=False)\n",
        "\n",
        "\n",
        "t = time.time() \n",
        "\n",
        "with tf.Session() as session:\n",
        "  session.run([tf.global_variables_initializer(), tf.tables_initializer()])\n",
        "  bert_outputs = session.run(bert_module(bert_inputs, signature=\"tokens\", as_dict=True))\n",
        "  \n",
        "\n",
        "t2 = time.time()\n",
        "print(round(t2-t, 5), 'Seconds to predict')\n",
        "\n",
        "  \n",
        "\n",
        "pooled_output = bert_outputs[\"pooled_output\"]"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Saver not created because there are no variables in the graph to restore\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Saver not created because there are no variables in the graph to restore\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "23.33557 Seconds to predict\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mijANYKuWfNf",
        "colab_type": "code",
        "outputId": "4dfbbf1d-d764-4778-f129-2a5080a37187",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 278
        }
      },
      "source": [
        "pooled_output = bert_outputs[\"pooled_output\"]\n",
        "print(pooled_output.shape)\n",
        "pooled_output"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(3503, 768)\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[ 0.3309436 ,  0.00226622,  0.32829154, ..., -0.38312903,\n",
              "         0.20412014,  0.24579671],\n",
              "       [ 0.3761179 , -0.08474827,  0.3083133 , ..., -0.23839965,\n",
              "         0.20487733,  0.16242261],\n",
              "       [ 0.39279824, -0.17144825,  0.3055103 , ..., -0.47528458,\n",
              "         0.24804759,  0.24116465],\n",
              "       ...,\n",
              "       [ 0.43240264,  0.0924272 ,  0.335994  , ..., -0.42362997,\n",
              "         0.2150477 ,  0.11122324],\n",
              "       [ 0.4047562 ,  0.04343599,  0.23401332, ..., -0.18150674,\n",
              "         0.08990362,  0.10266227],\n",
              "       [ 0.43208814, -0.16266493,  0.30272773, ..., -0.33386657,\n",
              "         0.29739577,  0.28396413]], dtype=float32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 13
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4nNJsplhZWvD",
        "colab_type": "text"
      },
      "source": [
        "##  5. Create bert_test and extract embedding vectors （テストデータ準備と特徴量ベクトルの取得）"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Vl4eKgH3ZVu6",
        "colab_type": "code",
        "outputId": "d6751298-b3b0-4d4c-aa83-d311d6684337",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 409
        }
      },
      "source": [
        "bert_test = dict(\n",
        "    input_ids=test_input_ids,\n",
        "    input_mask=test_input_masks,\n",
        "    segment_ids=test_segment_ids)\n",
        "\n",
        "bert_test"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'input_ids': array([[  101,   100,  5712, ...,     0,     0,     0],\n",
              "        [  101,  2015, 12434, ...,     0,     0,     0],\n",
              "        [  101,  4476,  4580, ...,     0,     0,     0],\n",
              "        ...,\n",
              "        [  101,  4854,  1980, ...,     0,     0,     0],\n",
              "        [  101,   148, 11490, ...,     0,     0,     0],\n",
              "        [  101,  4476,  2251, ...,     0,     0,     0]]),\n",
              " 'input_mask': array([[1, 1, 1, ..., 0, 0, 0],\n",
              "        [1, 1, 1, ..., 0, 0, 0],\n",
              "        [1, 1, 1, ..., 0, 0, 0],\n",
              "        ...,\n",
              "        [1, 1, 1, ..., 0, 0, 0],\n",
              "        [1, 1, 1, ..., 0, 0, 0],\n",
              "        [1, 1, 1, ..., 0, 0, 0]]),\n",
              " 'segment_ids': array([[0, 0, 0, ..., 0, 0, 0],\n",
              "        [0, 0, 0, ..., 0, 0, 0],\n",
              "        [0, 0, 0, ..., 0, 0, 0],\n",
              "        ...,\n",
              "        [0, 0, 0, ..., 0, 0, 0],\n",
              "        [0, 0, 0, ..., 0, 0, 0],\n",
              "        [0, 0, 0, ..., 0, 0, 0]])}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 14
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Le6970XYaSCV",
        "colab_type": "code",
        "outputId": "402bd010-4dc5-4f5b-c5c5-494b1ddabf17",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 73
        }
      },
      "source": [
        "t = time.time() \n",
        "\n",
        "with tf.Session() as session:\n",
        "  session.run([tf.global_variables_initializer(), tf.tables_initializer()])\n",
        "  bert_outputs2 = session.run(bert_module(bert_test, signature=\"tokens\", as_dict=True))\n",
        "  \n",
        "\n",
        "t2 = time.time()\n",
        "print(round(t2-t, 5), 'Seconds to predict')\n"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Saver not created because there are no variables in the graph to restore\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Saver not created because there are no variables in the graph to restore\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "8.02823 Seconds to predict\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MSG_ThDeaSMG",
        "colab_type": "code",
        "outputId": "48d8df30-a081-448f-c410-b9052c723995",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 260
        }
      },
      "source": [
        "pooled_output2 = bert_outputs2[\"pooled_output\"]\n",
        "pooled_output2"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[ 0.2525362 ,  0.06495357,  0.28061128, ..., -0.17444399,\n",
              "         0.21893732,  0.02746354],\n",
              "       [ 0.313074  , -0.03618057,  0.24547501, ..., -0.2627668 ,\n",
              "         0.14594312,  0.10071174],\n",
              "       [ 0.2933037 , -0.0561114 ,  0.36557734, ..., -0.3451954 ,\n",
              "         0.26619253,  0.06667353],\n",
              "       ...,\n",
              "       [ 0.35316917,  0.03228869,  0.30559295, ..., -0.04534116,\n",
              "         0.27333385,  0.0794063 ],\n",
              "       [ 0.3793611 , -0.0408264 ,  0.30807894, ..., -0.16299908,\n",
              "         0.29364216,  0.24983822],\n",
              "       [ 0.26637638, -0.14480321,  0.23917615, ..., -0.13616638,\n",
              "         0.05432262,  0.09414483]], dtype=float32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 16
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ZVvWuvj9aSQJ",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "x_train=pooled_output\n",
        "x_test=pooled_output2\n",
        "\n",
        "y_train=train_labels\n",
        "y_test=test_labels"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "v-1oxcBCaSIe",
        "colab_type": "code",
        "outputId": "feae438f-c24b-4392-fa7f-2ca26a9ae47e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 92
        }
      },
      "source": [
        "print(type(y_train))\n",
        "print(np.shape(y_train))\n",
        "print(type(y_test))\n",
        "print(np.shape(y_test))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "<class 'numpy.ndarray'>\n",
            "(3503, 1)\n",
            "<class 'numpy.ndarray'>\n",
            "(876, 1)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RBfdxgQCaSF1",
        "colab_type": "code",
        "outputId": "9ff97ab5-a287-464f-c3cd-aaa075ad7bc6",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 410
        }
      },
      "source": [
        "input = tf.keras.Input(shape=(768,))\n",
        "x = tf.keras.layers.Dense(8, activation='relu')(input)\n",
        "pred = tf.keras.layers.Dense(5, activation='softmax')(x) \n",
        "\n",
        "model=tf.keras.Model(inputs=input, outputs=pred)\n",
        "model.summary()\n",
        "  "
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "If using Keras pass *_constraint arguments to layers.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "If using Keras pass *_constraint arguments to layers.\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "Model: \"model\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_1 (InputLayer)         [(None, 768)]             0         \n",
            "_________________________________________________________________\n",
            "dense (Dense)                (None, 8)                 6152      \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 5)                 45        \n",
            "=================================================================\n",
            "Total params: 6,197\n",
            "Trainable params: 6,197\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rrIT_oocYyzA",
        "colab_type": "text"
      },
      "source": [
        "## 6. Train and evaluate model for classification task (カテゴリ判別モデルの訓練と評価)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "m6RuheY7azZM",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "  model.compile(loss='sparse_categorical_crossentropy', optimizer=tf.train.AdamOptimizer(learning_rate=1e-3, ), metrics=['accuracy'])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4Y7mkjWVazhx",
        "colab_type": "code",
        "outputId": "eb324589-878d-4167-d025-367c16b9a573",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "t = time.time() \n",
        "\n",
        "history = model.fit(x_train, y_train ,\n",
        "                    batch_size=32,\n",
        "                    epochs=200,\n",
        "                    verbose=1,\n",
        "                    validation_data=(x_test, y_test)\n",
        "                       )\n",
        "\n",
        "t2 = time.time()\n",
        "print(round(t2-t, 5), 'Seconds to predict')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Train on 3503 samples, validate on 876 samples\n",
            "Epoch 1/200\n",
            "3503/3503 [==============================] - 1s 359us/sample - loss: 1.5447 - acc: 0.2952 - val_loss: 1.4933 - val_acc: 0.3082\n",
            "Epoch 2/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 1.4443 - acc: 0.4131 - val_loss: 1.4069 - val_acc: 0.4110\n",
            "Epoch 3/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 1.3420 - acc: 0.5073 - val_loss: 1.2434 - val_acc: 0.5719\n",
            "Epoch 4/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 1.1326 - acc: 0.6212 - val_loss: 1.0420 - val_acc: 0.6587\n",
            "Epoch 5/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.9575 - acc: 0.6803 - val_loss: 0.9213 - val_acc: 0.6918\n",
            "Epoch 6/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.8666 - acc: 0.7005 - val_loss: 0.8567 - val_acc: 0.7043\n",
            "Epoch 7/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.8023 - acc: 0.7171 - val_loss: 0.8158 - val_acc: 0.7146\n",
            "Epoch 8/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.7610 - acc: 0.7294 - val_loss: 0.7958 - val_acc: 0.7135\n",
            "Epoch 9/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.7253 - acc: 0.7388 - val_loss: 0.7545 - val_acc: 0.7317\n",
            "Epoch 10/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.6955 - acc: 0.7536 - val_loss: 0.7278 - val_acc: 0.7386\n",
            "Epoch 11/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.6743 - acc: 0.7562 - val_loss: 0.7097 - val_acc: 0.7489\n",
            "Epoch 12/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.6580 - acc: 0.7693 - val_loss: 0.6932 - val_acc: 0.7534\n",
            "Epoch 13/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.6359 - acc: 0.7750 - val_loss: 0.7005 - val_acc: 0.7557\n",
            "Epoch 14/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.6276 - acc: 0.7708 - val_loss: 0.6809 - val_acc: 0.7534\n",
            "Epoch 15/200\n",
            "3503/3503 [==============================] - 0s 67us/sample - loss: 0.6097 - acc: 0.7896 - val_loss: 0.6745 - val_acc: 0.7728\n",
            "Epoch 16/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.5995 - acc: 0.7876 - val_loss: 0.6541 - val_acc: 0.7785\n",
            "Epoch 17/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.5916 - acc: 0.7865 - val_loss: 0.6633 - val_acc: 0.7728\n",
            "Epoch 18/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.5758 - acc: 0.7902 - val_loss: 0.6333 - val_acc: 0.7820\n",
            "Epoch 19/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.5660 - acc: 0.8010 - val_loss: 0.6618 - val_acc: 0.7694\n",
            "Epoch 20/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.5640 - acc: 0.7927 - val_loss: 0.6177 - val_acc: 0.7934\n",
            "Epoch 21/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.5539 - acc: 0.8010 - val_loss: 0.6170 - val_acc: 0.7808\n",
            "Epoch 22/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.5511 - acc: 0.7936 - val_loss: 0.6041 - val_acc: 0.7911\n",
            "Epoch 23/200\n",
            "3503/3503 [==============================] - 0s 80us/sample - loss: 0.5460 - acc: 0.7993 - val_loss: 0.6006 - val_acc: 0.7854\n",
            "Epoch 24/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.5324 - acc: 0.8033 - val_loss: 0.6084 - val_acc: 0.7922\n",
            "Epoch 25/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.5307 - acc: 0.8053 - val_loss: 0.5989 - val_acc: 0.7842\n",
            "Epoch 26/200\n",
            "3503/3503 [==============================] - 0s 66us/sample - loss: 0.5216 - acc: 0.8110 - val_loss: 0.6107 - val_acc: 0.7785\n",
            "Epoch 27/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.5152 - acc: 0.8113 - val_loss: 0.5838 - val_acc: 0.7934\n",
            "Epoch 28/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.5099 - acc: 0.8170 - val_loss: 0.6077 - val_acc: 0.7957\n",
            "Epoch 29/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.5059 - acc: 0.8162 - val_loss: 0.5751 - val_acc: 0.8014\n",
            "Epoch 30/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.4992 - acc: 0.8230 - val_loss: 0.5800 - val_acc: 0.7945\n",
            "Epoch 31/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.4991 - acc: 0.8187 - val_loss: 0.5905 - val_acc: 0.7934\n",
            "Epoch 32/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.4897 - acc: 0.8261 - val_loss: 0.5785 - val_acc: 0.7842\n",
            "Epoch 33/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.4852 - acc: 0.8287 - val_loss: 0.5651 - val_acc: 0.8025\n",
            "Epoch 34/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.4853 - acc: 0.8279 - val_loss: 0.5801 - val_acc: 0.8082\n",
            "Epoch 35/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.4751 - acc: 0.8321 - val_loss: 0.5822 - val_acc: 0.7922\n",
            "Epoch 36/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.4767 - acc: 0.8327 - val_loss: 0.5716 - val_acc: 0.7831\n",
            "Epoch 37/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.4715 - acc: 0.8333 - val_loss: 0.5734 - val_acc: 0.8048\n",
            "Epoch 38/200\n",
            "3503/3503 [==============================] - 0s 78us/sample - loss: 0.4614 - acc: 0.8367 - val_loss: 0.5647 - val_acc: 0.8151\n",
            "Epoch 39/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.4609 - acc: 0.8367 - val_loss: 0.5404 - val_acc: 0.8151\n",
            "Epoch 40/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.4499 - acc: 0.8404 - val_loss: 0.5614 - val_acc: 0.7957\n",
            "Epoch 41/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.4506 - acc: 0.8376 - val_loss: 0.5622 - val_acc: 0.7979\n",
            "Epoch 42/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.4418 - acc: 0.8456 - val_loss: 0.5391 - val_acc: 0.8265\n",
            "Epoch 43/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.4390 - acc: 0.8504 - val_loss: 0.5302 - val_acc: 0.8151\n",
            "Epoch 44/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.4372 - acc: 0.8473 - val_loss: 0.5305 - val_acc: 0.8128\n",
            "Epoch 45/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.4362 - acc: 0.8456 - val_loss: 0.5428 - val_acc: 0.8139\n",
            "Epoch 46/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.4504 - acc: 0.8333 - val_loss: 0.5419 - val_acc: 0.8162\n",
            "Epoch 47/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.4275 - acc: 0.8476 - val_loss: 0.5195 - val_acc: 0.8094\n",
            "Epoch 48/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.4201 - acc: 0.8516 - val_loss: 0.5200 - val_acc: 0.8139\n",
            "Epoch 49/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.4234 - acc: 0.8498 - val_loss: 0.5233 - val_acc: 0.8094\n",
            "Epoch 50/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.4158 - acc: 0.8567 - val_loss: 0.5171 - val_acc: 0.8185\n",
            "Epoch 51/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.4147 - acc: 0.8544 - val_loss: 0.5147 - val_acc: 0.8276\n",
            "Epoch 52/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.4106 - acc: 0.8524 - val_loss: 0.5245 - val_acc: 0.8094\n",
            "Epoch 53/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.4098 - acc: 0.8556 - val_loss: 0.5024 - val_acc: 0.8242\n",
            "Epoch 54/200\n",
            "3503/3503 [==============================] - 0s 77us/sample - loss: 0.4060 - acc: 0.8561 - val_loss: 0.5316 - val_acc: 0.8128\n",
            "Epoch 55/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.4015 - acc: 0.8590 - val_loss: 0.5232 - val_acc: 0.8162\n",
            "Epoch 56/200\n",
            "3503/3503 [==============================] - 0s 79us/sample - loss: 0.4036 - acc: 0.8536 - val_loss: 0.5289 - val_acc: 0.8025\n",
            "Epoch 57/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3974 - acc: 0.8578 - val_loss: 0.5064 - val_acc: 0.8253\n",
            "Epoch 58/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.4004 - acc: 0.8587 - val_loss: 0.4932 - val_acc: 0.8253\n",
            "Epoch 59/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3924 - acc: 0.8607 - val_loss: 0.4920 - val_acc: 0.8299\n",
            "Epoch 60/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.3877 - acc: 0.8658 - val_loss: 0.4985 - val_acc: 0.8185\n",
            "Epoch 61/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3913 - acc: 0.8576 - val_loss: 0.5131 - val_acc: 0.8288\n",
            "Epoch 62/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3866 - acc: 0.8661 - val_loss: 0.5157 - val_acc: 0.8219\n",
            "Epoch 63/200\n",
            "3503/3503 [==============================] - 0s 77us/sample - loss: 0.3862 - acc: 0.8590 - val_loss: 0.4881 - val_acc: 0.8242\n",
            "Epoch 64/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.3851 - acc: 0.8661 - val_loss: 0.5147 - val_acc: 0.8322\n",
            "Epoch 65/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.3830 - acc: 0.8621 - val_loss: 0.5060 - val_acc: 0.8231\n",
            "Epoch 66/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.3835 - acc: 0.8661 - val_loss: 0.5120 - val_acc: 0.8265\n",
            "Epoch 67/200\n",
            "3503/3503 [==============================] - 0s 77us/sample - loss: 0.3772 - acc: 0.8635 - val_loss: 0.4974 - val_acc: 0.8185\n",
            "Epoch 68/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.3779 - acc: 0.8693 - val_loss: 0.4839 - val_acc: 0.8276\n",
            "Epoch 69/200\n",
            "3503/3503 [==============================] - 0s 67us/sample - loss: 0.3740 - acc: 0.8655 - val_loss: 0.4862 - val_acc: 0.8288\n",
            "Epoch 70/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.3726 - acc: 0.8678 - val_loss: 0.5044 - val_acc: 0.8208\n",
            "Epoch 71/200\n",
            "3503/3503 [==============================] - 0s 83us/sample - loss: 0.3717 - acc: 0.8687 - val_loss: 0.5125 - val_acc: 0.8276\n",
            "Epoch 72/200\n",
            "3503/3503 [==============================] - 0s 79us/sample - loss: 0.3719 - acc: 0.8701 - val_loss: 0.4783 - val_acc: 0.8311\n",
            "Epoch 73/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.3658 - acc: 0.8730 - val_loss: 0.4836 - val_acc: 0.8288\n",
            "Epoch 74/200\n",
            "3503/3503 [==============================] - 0s 78us/sample - loss: 0.3667 - acc: 0.8713 - val_loss: 0.5134 - val_acc: 0.8196\n",
            "Epoch 75/200\n",
            "3503/3503 [==============================] - 0s 77us/sample - loss: 0.3672 - acc: 0.8693 - val_loss: 0.4723 - val_acc: 0.8345\n",
            "Epoch 76/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3591 - acc: 0.8724 - val_loss: 0.4869 - val_acc: 0.8333\n",
            "Epoch 77/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3644 - acc: 0.8701 - val_loss: 0.4957 - val_acc: 0.8162\n",
            "Epoch 78/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.3630 - acc: 0.8675 - val_loss: 0.4997 - val_acc: 0.8116\n",
            "Epoch 79/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3605 - acc: 0.8752 - val_loss: 0.4726 - val_acc: 0.8345\n",
            "Epoch 80/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.3543 - acc: 0.8735 - val_loss: 0.4808 - val_acc: 0.8402\n",
            "Epoch 81/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.3541 - acc: 0.8764 - val_loss: 0.4757 - val_acc: 0.8276\n",
            "Epoch 82/200\n",
            "3503/3503 [==============================] - 0s 77us/sample - loss: 0.3533 - acc: 0.8747 - val_loss: 0.4829 - val_acc: 0.8196\n",
            "Epoch 83/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3500 - acc: 0.8772 - val_loss: 0.4917 - val_acc: 0.8219\n",
            "Epoch 84/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3566 - acc: 0.8695 - val_loss: 0.4889 - val_acc: 0.8242\n",
            "Epoch 85/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3463 - acc: 0.8772 - val_loss: 0.4785 - val_acc: 0.8242\n",
            "Epoch 86/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3518 - acc: 0.8718 - val_loss: 0.4853 - val_acc: 0.8231\n",
            "Epoch 87/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3475 - acc: 0.8730 - val_loss: 0.5046 - val_acc: 0.8288\n",
            "Epoch 88/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.3437 - acc: 0.8781 - val_loss: 0.4798 - val_acc: 0.8288\n",
            "Epoch 89/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3482 - acc: 0.8730 - val_loss: 0.4834 - val_acc: 0.8368\n",
            "Epoch 90/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3475 - acc: 0.8724 - val_loss: 0.5020 - val_acc: 0.8253\n",
            "Epoch 91/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3429 - acc: 0.8738 - val_loss: 0.4696 - val_acc: 0.8311\n",
            "Epoch 92/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.3406 - acc: 0.8790 - val_loss: 0.4688 - val_acc: 0.8322\n",
            "Epoch 93/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3365 - acc: 0.8815 - val_loss: 0.4688 - val_acc: 0.8322\n",
            "Epoch 94/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.3351 - acc: 0.8821 - val_loss: 0.4757 - val_acc: 0.8253\n",
            "Epoch 95/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3411 - acc: 0.8767 - val_loss: 0.4858 - val_acc: 0.8265\n",
            "Epoch 96/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3360 - acc: 0.8778 - val_loss: 0.4747 - val_acc: 0.8345\n",
            "Epoch 97/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.3395 - acc: 0.8778 - val_loss: 0.4650 - val_acc: 0.8402\n",
            "Epoch 98/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.3342 - acc: 0.8801 - val_loss: 0.4673 - val_acc: 0.8368\n",
            "Epoch 99/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3323 - acc: 0.8815 - val_loss: 0.4876 - val_acc: 0.8276\n",
            "Epoch 100/200\n",
            "3503/3503 [==============================] - 0s 66us/sample - loss: 0.3322 - acc: 0.8807 - val_loss: 0.4772 - val_acc: 0.8242\n",
            "Epoch 101/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3307 - acc: 0.8815 - val_loss: 0.4641 - val_acc: 0.8379\n",
            "Epoch 102/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.3280 - acc: 0.8812 - val_loss: 0.4785 - val_acc: 0.8231\n",
            "Epoch 103/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3295 - acc: 0.8784 - val_loss: 0.4933 - val_acc: 0.8368\n",
            "Epoch 104/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3264 - acc: 0.8864 - val_loss: 0.4759 - val_acc: 0.8311\n",
            "Epoch 105/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.3304 - acc: 0.8798 - val_loss: 0.4611 - val_acc: 0.8299\n",
            "Epoch 106/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3217 - acc: 0.8858 - val_loss: 0.4832 - val_acc: 0.8322\n",
            "Epoch 107/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.3222 - acc: 0.8838 - val_loss: 0.4573 - val_acc: 0.8345\n",
            "Epoch 108/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3322 - acc: 0.8792 - val_loss: 0.5205 - val_acc: 0.8139\n",
            "Epoch 109/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3241 - acc: 0.8835 - val_loss: 0.4581 - val_acc: 0.8345\n",
            "Epoch 110/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.3212 - acc: 0.8858 - val_loss: 0.4652 - val_acc: 0.8345\n",
            "Epoch 111/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3186 - acc: 0.8870 - val_loss: 0.4702 - val_acc: 0.8276\n",
            "Epoch 112/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.3191 - acc: 0.8827 - val_loss: 0.4593 - val_acc: 0.8390\n",
            "Epoch 113/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3191 - acc: 0.8830 - val_loss: 0.5252 - val_acc: 0.8151\n",
            "Epoch 114/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3180 - acc: 0.8884 - val_loss: 0.4595 - val_acc: 0.8402\n",
            "Epoch 115/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.3176 - acc: 0.8875 - val_loss: 0.4677 - val_acc: 0.8413\n",
            "Epoch 116/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.3127 - acc: 0.8864 - val_loss: 0.4580 - val_acc: 0.8390\n",
            "Epoch 117/200\n",
            "3503/3503 [==============================] - 0s 66us/sample - loss: 0.3156 - acc: 0.8861 - val_loss: 0.4652 - val_acc: 0.8356\n",
            "Epoch 118/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.3104 - acc: 0.8907 - val_loss: 0.4525 - val_acc: 0.8368\n",
            "Epoch 119/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3105 - acc: 0.8890 - val_loss: 0.4572 - val_acc: 0.8425\n",
            "Epoch 120/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3131 - acc: 0.8887 - val_loss: 0.4775 - val_acc: 0.8299\n",
            "Epoch 121/200\n",
            "3503/3503 [==============================] - 0s 77us/sample - loss: 0.3124 - acc: 0.8895 - val_loss: 0.4663 - val_acc: 0.8322\n",
            "Epoch 122/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3092 - acc: 0.8898 - val_loss: 0.4894 - val_acc: 0.8276\n",
            "Epoch 123/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.3171 - acc: 0.8864 - val_loss: 0.4734 - val_acc: 0.8368\n",
            "Epoch 124/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.3062 - acc: 0.8901 - val_loss: 0.4540 - val_acc: 0.8413\n",
            "Epoch 125/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3011 - acc: 0.8938 - val_loss: 0.4666 - val_acc: 0.8311\n",
            "Epoch 126/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.3082 - acc: 0.8864 - val_loss: 0.4897 - val_acc: 0.8345\n",
            "Epoch 127/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.3047 - acc: 0.8924 - val_loss: 0.4670 - val_acc: 0.8311\n",
            "Epoch 128/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3111 - acc: 0.8841 - val_loss: 0.4698 - val_acc: 0.8356\n",
            "Epoch 129/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.3038 - acc: 0.8904 - val_loss: 0.4629 - val_acc: 0.8368\n",
            "Epoch 130/200\n",
            "3503/3503 [==============================] - 0s 74us/sample - loss: 0.3030 - acc: 0.8901 - val_loss: 0.4673 - val_acc: 0.8345\n",
            "Epoch 131/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3036 - acc: 0.8910 - val_loss: 0.4740 - val_acc: 0.8333\n",
            "Epoch 132/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2985 - acc: 0.8958 - val_loss: 0.4828 - val_acc: 0.8379\n",
            "Epoch 133/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2978 - acc: 0.8890 - val_loss: 0.4856 - val_acc: 0.8276\n",
            "Epoch 134/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.3010 - acc: 0.8910 - val_loss: 0.4611 - val_acc: 0.8356\n",
            "Epoch 135/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2993 - acc: 0.8944 - val_loss: 0.4512 - val_acc: 0.8402\n",
            "Epoch 136/200\n",
            "3503/3503 [==============================] - 0s 67us/sample - loss: 0.2910 - acc: 0.8944 - val_loss: 0.4876 - val_acc: 0.8253\n",
            "Epoch 137/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2973 - acc: 0.8955 - val_loss: 0.4892 - val_acc: 0.8253\n",
            "Epoch 138/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.3010 - acc: 0.8907 - val_loss: 0.4559 - val_acc: 0.8436\n",
            "Epoch 139/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.2948 - acc: 0.8978 - val_loss: 0.4539 - val_acc: 0.8413\n",
            "Epoch 140/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2904 - acc: 0.8952 - val_loss: 0.4598 - val_acc: 0.8356\n",
            "Epoch 141/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.2970 - acc: 0.8924 - val_loss: 0.4582 - val_acc: 0.8402\n",
            "Epoch 142/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2895 - acc: 0.8987 - val_loss: 0.4843 - val_acc: 0.8356\n",
            "Epoch 143/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2934 - acc: 0.8952 - val_loss: 0.4637 - val_acc: 0.8413\n",
            "Epoch 144/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.2934 - acc: 0.8924 - val_loss: 0.4836 - val_acc: 0.8368\n",
            "Epoch 145/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2891 - acc: 0.8918 - val_loss: 0.4718 - val_acc: 0.8368\n",
            "Epoch 146/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2962 - acc: 0.8944 - val_loss: 0.4819 - val_acc: 0.8311\n",
            "Epoch 147/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2910 - acc: 0.8975 - val_loss: 0.4566 - val_acc: 0.8402\n",
            "Epoch 148/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.2848 - acc: 0.8981 - val_loss: 0.4555 - val_acc: 0.8447\n",
            "Epoch 149/200\n",
            "3503/3503 [==============================] - 0s 75us/sample - loss: 0.2834 - acc: 0.8969 - val_loss: 0.4976 - val_acc: 0.8288\n",
            "Epoch 150/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2841 - acc: 0.8958 - val_loss: 0.4702 - val_acc: 0.8379\n",
            "Epoch 151/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.2819 - acc: 0.8989 - val_loss: 0.4636 - val_acc: 0.8390\n",
            "Epoch 152/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2821 - acc: 0.8984 - val_loss: 0.5202 - val_acc: 0.8128\n",
            "Epoch 153/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2881 - acc: 0.8938 - val_loss: 0.4680 - val_acc: 0.8390\n",
            "Epoch 154/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2843 - acc: 0.8975 - val_loss: 0.4557 - val_acc: 0.8436\n",
            "Epoch 155/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.2832 - acc: 0.8981 - val_loss: 0.4803 - val_acc: 0.8356\n",
            "Epoch 156/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2809 - acc: 0.8998 - val_loss: 0.4759 - val_acc: 0.8345\n",
            "Epoch 157/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2958 - acc: 0.8907 - val_loss: 0.4778 - val_acc: 0.8379\n",
            "Epoch 158/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.2751 - acc: 0.9012 - val_loss: 0.4664 - val_acc: 0.8402\n",
            "Epoch 159/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2775 - acc: 0.8995 - val_loss: 0.5023 - val_acc: 0.8231\n",
            "Epoch 160/200\n",
            "3503/3503 [==============================] - 0s 66us/sample - loss: 0.2849 - acc: 0.8989 - val_loss: 0.4625 - val_acc: 0.8436\n",
            "Epoch 161/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.2760 - acc: 0.8972 - val_loss: 0.4940 - val_acc: 0.8345\n",
            "Epoch 162/200\n",
            "3503/3503 [==============================] - 0s 77us/sample - loss: 0.2779 - acc: 0.9004 - val_loss: 0.4486 - val_acc: 0.8447\n",
            "Epoch 163/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.2704 - acc: 0.9049 - val_loss: 0.4695 - val_acc: 0.8368\n",
            "Epoch 164/200\n",
            "3503/3503 [==============================] - 0s 66us/sample - loss: 0.2744 - acc: 0.9009 - val_loss: 0.4538 - val_acc: 0.8459\n",
            "Epoch 165/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2787 - acc: 0.9012 - val_loss: 0.4897 - val_acc: 0.8345\n",
            "Epoch 166/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2715 - acc: 0.9029 - val_loss: 0.4557 - val_acc: 0.8379\n",
            "Epoch 167/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2728 - acc: 0.9061 - val_loss: 0.4782 - val_acc: 0.8368\n",
            "Epoch 168/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2709 - acc: 0.9021 - val_loss: 0.4925 - val_acc: 0.8345\n",
            "Epoch 169/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2680 - acc: 0.9018 - val_loss: 0.4617 - val_acc: 0.8390\n",
            "Epoch 170/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2776 - acc: 0.8967 - val_loss: 0.4818 - val_acc: 0.8311\n",
            "Epoch 171/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.2718 - acc: 0.9038 - val_loss: 0.4523 - val_acc: 0.8425\n",
            "Epoch 172/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2687 - acc: 0.9061 - val_loss: 0.4636 - val_acc: 0.8425\n",
            "Epoch 173/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2702 - acc: 0.9027 - val_loss: 0.4555 - val_acc: 0.8390\n",
            "Epoch 174/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.2652 - acc: 0.9052 - val_loss: 0.4823 - val_acc: 0.8322\n",
            "Epoch 175/200\n",
            "3503/3503 [==============================] - 0s 72us/sample - loss: 0.2628 - acc: 0.9078 - val_loss: 0.5395 - val_acc: 0.8196\n",
            "Epoch 176/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2727 - acc: 0.9024 - val_loss: 0.4502 - val_acc: 0.8459\n",
            "Epoch 177/200\n",
            "3503/3503 [==============================] - 0s 68us/sample - loss: 0.2728 - acc: 0.8978 - val_loss: 0.4625 - val_acc: 0.8390\n",
            "Epoch 178/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2629 - acc: 0.9038 - val_loss: 0.4677 - val_acc: 0.8379\n",
            "Epoch 179/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2627 - acc: 0.9092 - val_loss: 0.4758 - val_acc: 0.8333\n",
            "Epoch 180/200\n",
            "3503/3503 [==============================] - 0s 67us/sample - loss: 0.2611 - acc: 0.9086 - val_loss: 0.4564 - val_acc: 0.8402\n",
            "Epoch 181/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2667 - acc: 0.9024 - val_loss: 0.4862 - val_acc: 0.8208\n",
            "Epoch 182/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2590 - acc: 0.9055 - val_loss: 0.4690 - val_acc: 0.8379\n",
            "Epoch 183/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2638 - acc: 0.9047 - val_loss: 0.4762 - val_acc: 0.8390\n",
            "Epoch 184/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2563 - acc: 0.9078 - val_loss: 0.4823 - val_acc: 0.8288\n",
            "Epoch 185/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2605 - acc: 0.9069 - val_loss: 0.4578 - val_acc: 0.8493\n",
            "Epoch 186/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.2717 - acc: 0.9024 - val_loss: 0.4559 - val_acc: 0.8447\n",
            "Epoch 187/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.2593 - acc: 0.9058 - val_loss: 0.4809 - val_acc: 0.8459\n",
            "Epoch 188/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2623 - acc: 0.9038 - val_loss: 0.4578 - val_acc: 0.8436\n",
            "Epoch 189/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2592 - acc: 0.9084 - val_loss: 0.4662 - val_acc: 0.8505\n",
            "Epoch 190/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2605 - acc: 0.9086 - val_loss: 0.4540 - val_acc: 0.8505\n",
            "Epoch 191/200\n",
            "3503/3503 [==============================] - 0s 76us/sample - loss: 0.2567 - acc: 0.9126 - val_loss: 0.4589 - val_acc: 0.8368\n",
            "Epoch 192/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2576 - acc: 0.9081 - val_loss: 0.4752 - val_acc: 0.8413\n",
            "Epoch 193/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2547 - acc: 0.9047 - val_loss: 0.4627 - val_acc: 0.8413\n",
            "Epoch 194/200\n",
            "3503/3503 [==============================] - 0s 73us/sample - loss: 0.2506 - acc: 0.9115 - val_loss: 0.4710 - val_acc: 0.8482\n",
            "Epoch 195/200\n",
            "3503/3503 [==============================] - 0s 78us/sample - loss: 0.2510 - acc: 0.9141 - val_loss: 0.4604 - val_acc: 0.8402\n",
            "Epoch 196/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2505 - acc: 0.9092 - val_loss: 0.4653 - val_acc: 0.8390\n",
            "Epoch 197/200\n",
            "3503/3503 [==============================] - 0s 69us/sample - loss: 0.2518 - acc: 0.9098 - val_loss: 0.4638 - val_acc: 0.8425\n",
            "Epoch 198/200\n",
            "3503/3503 [==============================] - 0s 70us/sample - loss: 0.2522 - acc: 0.9104 - val_loss: 0.4676 - val_acc: 0.8459\n",
            "Epoch 199/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2549 - acc: 0.9112 - val_loss: 0.4768 - val_acc: 0.8368\n",
            "Epoch 200/200\n",
            "3503/3503 [==============================] - 0s 71us/sample - loss: 0.2522 - acc: 0.9135 - val_loss: 0.4517 - val_acc: 0.8413\n",
            "53.65111 Seconds to predict\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Hx7j85wYazni",
        "colab_type": "code",
        "outputId": "6cfca0e6-c835-4f2b-a183-f257f2f87a16",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 350
        }
      },
      "source": [
        "import matplotlib.pyplot as plt\n",
        "\n",
        "acc = history.history['acc']\n",
        "val_acc = history.history['val_acc']\n",
        "loss = history.history['loss']\n",
        "val_loss = history.history['val_loss']\n",
        "\n",
        "epochs = range(len(acc))\n",
        "\n",
        "plt.figure(figsize=(15,5))\n",
        "\n",
        "plt.subplot(1, 2, 1)\n",
        "plt.plot(epochs, acc, label='Training acc')\n",
        "plt.plot(epochs, val_acc, label='Validation acc')\n",
        "plt.title('Training and validation accuracy')\n",
        "plt.xlabel('epoch')\n",
        "plt.ylabel('accuracy')\n",
        "plt.legend()\n",
        "            \n",
        "plt.subplot(1, 2, 2)\n",
        "plt.plot(epochs, loss, label='Training loss')\n",
        "plt.plot(epochs, val_loss, label='Validation loss')\n",
        "plt.title('Training and validation loss')\n",
        "plt.xlabel('epoch')\n",
        "plt.ylabel('loss')\n",
        "plt.legend()\n",
        "\n",
        "plt.show()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 1080x360 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    }
  ]
}